#pragma once

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>

// 堆的结构(底层结构为顺序表)

typedef int HPDataType ;

typedef struct Heap
{

    HPDataType* arr ;

    int size ;

    int capacity ;
    
} HP ;

// 堆的初始化

void HPInit (HP* php) ;

// 堆的销毁

void HPDestory (HP* php) ;

// 堆交换函数

void Swap (HPDataType* x , HPDataType* y) ; // 传址,需要交换的两个地址

// 堆的向上调整算法

void AdjustUp (HPDataType* arr , int child) ;

// 堆的向下调整算法

void AdjustDown (HPDataType* arr , int parent , int n) ;

// 入堆

void HPPush (HP* php , HPDataType x) ;

// 出堆

void HPPop (HP* php) ;

// 判断堆是否为空

bool HPEmpty (HP* php) ;

// 取堆顶数据

HPDataType HPTop (HP* php) ;

// 求堆大小

int HPSize (HP* php) ;

// 打印堆里面的内容

void HPPrint (HP* php) ;